//
//  UniAuthHelper.h
//  三网官方版本免密SDK
//
//  Created by zhuof on 2018/3/8.
//  Copyright © 2018年 xiaowo. All rights reserved.
//
// 4.6.0IR04B0105  1. 5g适配（部分兼容性bug修复）
//                 2. 超时时间精确
// 4.6.0IR04B0127 授权页和协议条款页强制竖屏
// 5.0.0IR04B0425 5g兼容http和https两种方案
// 5.0.1IR04B0607 增加弹窗关闭按钮长宽定义
//                移动服务条款页面地址修改为https
// 5.1.0IR04B0701 支持移动https方案

#import "UniAuthViewModel.h"

NS_ASSUME_NONNULL_BEGIN

typedef void (^UniResultListener)(NSDictionary *data);

@protocol UniAuthHelperDelegate;

@interface UniAuthHelper : NSObject

+ (UniAuthHelper *)getInstance;


- (NSString *) getSDKVersion;

/**
 初始化，禁止多次调用，禁止更换不同appid尝试初始化。
 */
- (void)initWithAppId:(NSString*) appId appSecret:(NSString*) appSecret;

/**
 获取号码认证用的accessCode
 */
- (void)mobileAuth:(UniResultListener) listener;

/**
 登陆前预取号，在doLogin前调用。
 */
- (void)getAccessCode:(UniResultListener) listener;

/**
 免密登录预取号（appid）
 */
- (void)getAccessCodeWithParam:(NSString*)param listener:(UniResultListener) listener;

/**
 拉起授权登录页面
 */
- (void)doLogin:(UIViewController *)viewController
                             viewModel:(nullable UniAuthViewModel *)viewModel
                            listener:(UniResultListener) listener;

/**
 是否正确执行预取号并且accessCode在有效期内，建议在doLogin方法执行前调用。
 */
- (BOOL)isPreGettedTokenValidate;

/**
 设置代理对象，处理用户点击切换账号，点击返回关闭按钮事件。
 */
- (void)setDelegate:(nullable id<UniAuthHelperDelegate>)delegate;

/**
 设置网络请求超时时间（单位s，默认5秒。网络情况复杂，建议设置3秒以上）
 */
- (void)setRequestTimeout:(NSTimeInterval)timeout;

/**
 关闭当前的授权页面
 */
- (void)dismissAuthViewController:(BOOL)animated completion:(void (^ __nullable)(void))completion;

/**
 关闭当前的授权页面
 */
- (void)dismissAuthViewController:(void (^ __nullable)(void))completion;

/**
 废弃20200320（点击登录按钮后，直接返回了code，无任何网络请求，无需loading）
 停止点击授权页面登录按钮之后的加载进度条
 */
- (void)stopLoading;

@end

@protocol UniAuthHelperDelegate <NSObject>

@optional

/**
 用户点击了授权页面的返回按钮
 */
- (void)userDidDismissAuthViewController;

/**
 用户点击了授权页面的"切换账户"按钮
 */
- (void)userDidSwitchAccount;

@end

NS_ASSUME_NONNULL_END
